<?php
/**
 * curl 采集类，可实现登录后的页面访问和采集
 * @author 41412754@qq.com
 * @example
 * $curl = new curl();<br />
 * $curl->timeout = 10;<br />
 * if ( $curl->post( 'login_address', 'user=aa&pass=bb', 1 ) == 200 ) $stream = $curl->get( 'url' );<br />
 * else exit( 'login faild' );
 */
class curl {
	
	private $curl;
	/** 超时限制 */
	public $timeout = 5;
	public $cookieFile;
	/** 采集状态 */
	public $status = null;
	
	public function __construct()
	{
		$this->cookieFile = dirname( __FILE__ ) . '/.cookies';
		$this->curl = curl_init(); // 启动一个CURL会话
	}
	
	public function __destruct()
	{
		curl_close( $this->curl ); // 关闭CURL会话
	}
	
	/**
	 * 发送post请求，可实现登录，有返回
	 * @param $url
	 * @param $data a=b&c=d
	 * @param $getCode 仅返回请求状态
	 */
	public function post( $url, $data )
	{
		curl_setopt( $this->curl, CURLOPT_POST, 1 ); // 发送一个常规的post请求
		curl_setopt( $this->curl, CURLOPT_POSTFIELDS, $data ); // post提交的数据包
		return $this->get( $url );
	}
	
	/**
	 * 返回采集内容
	 * @param $url
	 * @param $getCode 仅返回请求状态
	 */
	public function load( $url )
	{
		curl_setopt( $this->curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT'] ); // 模拟用户使用的浏览器
		curl_setopt( $this->curl, CURLOPT_FOLLOWLOCATION, 1 ); // 使用自动跳转
		curl_setopt( $this->curl, CURLOPT_AUTOREFERER, 1 ); // 自动设置Referer
		curl_setopt( $this->curl, CURLOPT_COOKIEJAR, $this->cookieFile ); // 存放Cookie信息的文件名称
		curl_setopt( $this->curl, CURLOPT_COOKIEFILE, $this->cookieFile ); // 读取上面所储存的Cookie信息
		curl_setopt( $this->curl, CURLOPT_TIMEOUT, $this->timeout ); // 设置超时限制防止死循环
		curl_setopt( $this->curl, CURLOPT_HEADER, 0 ); // 显示返回的Header区域内容
		curl_setopt( $this->curl, CURLOPT_RETURNTRANSFER, 1 ); // 获取的信息以文件流的形式返回
		curl_setopt( $this->curl, CURLOPT_URL, $url ); // 要访问的地址
		$result = curl_exec( $this->curl );
		$this->status = curl_getinfo( $this->curl, CURLINFO_HTTP_CODE );
		return $result;
	}
}
